package com.threadpool.juc;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 *
 * 通过submit提交的任务，会经过适配、包装等一大波操作之后，最终通过Thread类来启动线程执行
 *
 * 适配成FutureTask类型任务，run0将由FutureTask的run方法来调用
 * 使用FutureTask任务构造Worker对象，run0将由worker的run方法来启动
 * 通过Worker对象构造一个Thread对象,run0将由thread的run方法来启动
 * 在这个过程中发生了一个非常骚的操作
 *
 * run0这个方法被包装了3次，也就是说它的外层还有2个runnable接口
 * run0这个方法曾经被适配成Callable接口，然后又被转换成Runnable接口
 * ————————————————
 * 版权声明：本文为CSDN博主「Vongola骸」的原创文章，遵循 CC 4.0 BY-SA 版权协议，转载请附上原文出处链接及本声明。
 * 原文链接：https://blog.csdn.net/u011803809/article/details/77427641
 *
 *
 * @author: chenhs
 * @date: Created in 14:15 2019/9/3
 **/
public class TestThreadPool2 {
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        executorService.submit(newTask());
    }

    public static Runnable newTask() {
        return new Runnable() {
            @Override
            public void run() {
                System.out.println("run");
            }
        };
    }
}
